package com.zhiqianbao.utils;

import java.math.BigDecimal;

public class LoanUtils {
	
	/**
	 * 等额本息算法公式：每月还款额=贷款本金×（月利率×（1+月利率）^还款月数）÷（（1+月利率）^还款月数 — 1）
	 * @param capital 本金
	 * @param yearRate 年利率
	 * @param termLine 期数
	 * @return
	 */
	public static BigDecimal averageCapitalPlusInterest(BigDecimal capital, BigDecimal yearRate, int termLine) {
		//月利率
		BigDecimal monthRate = yearRate.divide(new BigDecimal(12));
		//本金乘以月利率
		BigDecimal r1 = capital.multiply(monthRate);
		//乘以（ 1 + 月利率  的 还款月数次方）
		BigDecimal r2 = r1.multiply(((BigDecimal.ONE.add(monthRate)).pow(termLine)));
		// （1 + 月利率 的 还款月数减一次方）
		BigDecimal r3 = ((BigDecimal.ONE.add(monthRate)).pow(termLine)).subtract(BigDecimal.ONE);
		BigDecimal result = r2.divide(r3, 0, BigDecimal.ROUND_HALF_DOWN);
		return result;
	}
	
	/**
	 * @param capital
	 * @param yearRate
	 * @param termLine
	 * @param overhead 管理费用
	 * @return
	 */
	public static BigDecimal averageCapitalPlusInterest(BigDecimal capital, BigDecimal yearRate, int termLine, BigDecimal overhead) { 
		return averageCapitalPlusInterest(capital, yearRate, termLine).add(overhead);
	}
	
	/**
	 * 成交综合管理费率
	 * =IF((E1/2+B1/2000*E1/2)>E1,E1,(E1/2+B1/2000*E1/2))
	 * @param capital 本金
	 * @param manageRate 管理费率
	 * @return
	 */
	public static BigDecimal transactionCostRate(BigDecimal capital, BigDecimal manageRate) {
		BigDecimal r1 = manageRate.divide(BigDecimal.valueOf(2));
		BigDecimal r2 = capital.divide(BigDecimal.valueOf(2000));
		BigDecimal r3 = r2.multiply(r1);
		BigDecimal r4 = r3.add(r1);
		BigDecimal result = r4.compareTo(manageRate) > 0 ? manageRate: r4;
		return result;
	}
	/**
	 * 成交综合管理费
	 * @param capital 本金
	 * @param manageRate 管理费率
	 * @return
	 */
	public static BigDecimal transactionCost(BigDecimal capital, BigDecimal manageRate) {
		return transactionCostRate(capital, manageRate).multiply(capital);
	}
}
